package studystat;

import java.io.IOException;

import java.util.Calendar;
import java.util.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

@SuppressWarnings("serial")
public class OpmeetController extends HttpServlet {
	
	private Date stopTijd;
	
	public void addStopTime(int stopTime, String googleAccount) {
		int last = StudentManager.getInstance().getStudent(googleAccount).getActiviteiten().size();
		//StudentManager.getInstance().getStudent(googleAccount).getActiviteit(last+1).setStopTijd(Calendar.getInstance());
	}
	
	
	
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
		UserService userService = UserServiceFactory.getUserService();
		User user = userService.getCurrentUser();
		if(req.getParameter("start")!= null){
			// We gaan een activiteit opmeten
			if(req.getParameter("type").equals("studie")) {
				String plaats = req.getParameter("plaats");
				String stringsamen = req.getParameter("samen");
				boolean samen = false;
				if(stringsamen != null){
					samen = true;
				}
				String vak = req.getParameter("vak");
				String userID = req.getParameter("userID");
				String type = req.getParameter("type");
				Date starttijd = Calendar.getInstance().getTime(); 
				StudentManager.getInstance().createStudie(userID, starttijd, type, vak, samen, plaats);
				resp.sendRedirect("timerstudie.jsp");
			}
			else if(req.getParameter("type").equals("sport")){
				//sport opslaan
				resp.sendRedirect("timersport.jsp");
				String sport = req.getParameter("welke");
				Date starttijd = Calendar.getInstance().getTime(); 
				StudentManager.getInstance().createSport(req.getParameter("userID"), starttijd, sport);
			}
			else if(req.getParameter("type").equals("slaap")) {
				//TODO controleren maar 1x per dag kunnen invoeren!! ook nog voor vorige dagen doen??
				int duur = Integer.parseInt(req.getParameter("uren").trim());
				StudentManager.getInstance().createSlaap(req.getParameter("userID"), duur);
				resp.sendRedirect("main.jsp");
			}
		}
		
		else if(req.getParameter("stop")!= null){
			System.out.println("We hebben op stop gedrukt!");
			String type = req.getParameter("type");
			stopTijd = Calendar.getInstance().getTime();
			if(type.equals("studie")){ 
				resp.sendRedirect("studieform.jsp"); 
			}
			else if(type.equals("sport")){
				resp.sendRedirect("sportform.jsp"); 
			}
			AchievementManager.getInstance().controleerAchievements(req.getParameter("userID"));
		}
		
		else if(req.getParameter("pauze")!= null){
			System.out.println("We hebben op pauze gedrukt!");
			Date beginPauze = Calendar.getInstance().getTime();
			System.out.println("userID in pauze: "+req.getParameter("userID"));
			System.out.println("beginPauze in pauze: "+beginPauze);
			StudentManager.getInstance().beginPauze(req.getParameter("userID"), beginPauze);
		}
		
		else if(req.getParameter("hervatten")!= null) {
			System.out.println("We hebben op hervat gedrukt!");
			System.out.println("userID in hervat: "+req.getParameter("userID"));
			Date eindePauze = Calendar.getInstance().getTime();
			System.out.println("eindePauze in hervat: "+eindePauze);
			StudentManager.getInstance().hervat(req.getParameter("userID"), eindePauze);
		}
		
		else if(req.getParameter("submitstudie") != null) {
			//TODO controle achievement verdiend!!!!
			int rating = 0;
			String star1 = (String) req.getParameter("star1");
			if (star1 != null) {
			    rating = Integer.parseInt(star1.substring(6));
			}				
			boolean theorie = false; 
			int aantalpag = 0;
			if((String) req.getParameter("theorie")!=null){
				theorie = true;
				aantalpag = Integer.parseInt((String) req.getParameter("theoriepaginas").trim());
				System.out.println("Aantalpag: "+aantalpag);
//				if((String) req.getParameter("oefeningen") ==  null){
//					aantalpag = 0;
//				}
			}
			boolean oef = false;
			int aantaloef = 0;
			if((String) req.getParameter("oefeningen")!=null){
				oef = true;
				aantaloef = Integer.parseInt((String) req.getParameter("oefeningenaantal").trim());
//				if((String) req.getParameter("theorie") ==  null){
//					aantaloef = 0;
//				}
			}
			String googleAccount = req.getParameter("userID");
			StudentManager.getInstance().stopStudie(rating, stopTijd, aantaloef, aantalpag, theorie, oef, googleAccount);			
			if(AchievementManager.getInstance().controleerAchievements(googleAccount).size() != 0){
				//TODO dan moet er een melding worden gegeven dat er (een) achievement(s) is/zijn verdiend!!
				//TODO naar datastore en lijst sturen!!
				System.out.println("Achievement(s) verdiend!");
				resp.sendRedirect("achievementnotification.jsp");
			}
			else {
				resp.sendRedirect("main.jsp");
			}
		}
		
		else if(req.getParameter("submitsport") != null) {
			String googleAccount = req.getParameter("userID");
			int rating = 0;
			String star1 = (String) req.getParameter("star1");
			if (star1 != null) {
			    rating = Integer.parseInt(star1.substring(6));
			}				
			StudentManager.getInstance().stopSport(rating, stopTijd, googleAccount);
			resp.sendRedirect("main.jsp");
		}
		
		else if(req.getParameter("fromachievement") != null){
			resp.sendRedirect("main.jsp");
		}
		//System.out.println("Pauze? "+req.getParameter("pauze"));
	}
	
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
		if(req.getParameter("pauze")!= null){
			System.out.println("We hebben op pauze gedrukt!");
			Date beginPauze = Calendar.getInstance().getTime();
			System.out.println("userID in pauze: "+req.getParameter("userId"));
			System.out.println("beginPauze in pauze: "+beginPauze);
			StudentManager.getInstance().beginPauze(req.getParameter("userId"), beginPauze);
		}
		
		else if(req.getParameter("hervat")!= null) {
			System.out.println("We hebben op hervat gedrukt!");
			System.out.println("userID in hervat: "+req.getParameter("userId"));
			Date eindePauze = Calendar.getInstance().getTime();
			System.out.println("eindePauze in hervat: "+eindePauze);
			StudentManager.getInstance().hervat(req.getParameter("userId"), eindePauze);
		}
	}
	
}
